ランダムな数の発生方法-04-2

誤差関数を使って表してみる

\(\Large Rand_{0-1} = \frac{1}{ \sqrt{ \mathstrut 2 \ \pi \ \sigma^2}} \int_{-\infty}^x e^{- \frac{t^2}{2 \sigma^2}} dt \) 

誤差関数は,

\(\Large erf (x) = \frac{1}{ \sqrt{ \pi }} \int_{0}^x e^{- t^2} dt \) 

ですので,変数変換して,

\(\Large \frac{t^2}{2 \sigma^2} \equiv w^2 \ \rightarrow \frac{t}{\sqrt{2} \sigma} = w \ \rightarrow \ \frac{dt}{\sqrt{2} \sigma} = dw\) 

\(\Large 0 \sim t \sim x\) 

\(\Large 0 \sim \ w \sim \ \frac{x}{\sqrt{2} \sigma} \) 

となるので,

\(\Large Rand_{0-1} = \frac{1}{ \sqrt{ \mathstrut 2 \ \pi \ \sigma^2}} \displaystyle \int_{-\infty}^{x / \sqrt{2} \sigma} e^{- w^2} dw \cdot \sqrt{2} \sigma \) 

\(\Large = \frac{1}{ \sqrt{ \pi }} \displaystyle \int_{-\infty}^{x / \sqrt{2} \sigma} e^{- w^2} dw \) 

\(\Large = \frac{1}{ \sqrt{ \pi }} \left[ \displaystyle \int_{-\infty}^{0} e^{- w^2} dw + \int_{0}^{x / \sqrt{2} \sigma} e^{- w^2} dw\right] \) 

誤差関数から,

\(\Large erf (- \infty) = \frac{1}{ \sqrt{ \pi }} \displaystyle \int_{0}^{- \infty} e^{- t^2} dt = -1\) 

\(\Large \displaystyle \int_{0}^{- \infty} e^{- t^2} dt = - \frac{ \sqrt{ \pi}}{2} \rightarrow \displaystyle \int_{- \infty}^0 e^{- t^2} dt = \frac{ \sqrt{ \pi}}{2} \) 

となるので,

\(\Large Rand_{0-1} = \frac{1}{ \sqrt{ \pi }} \left[ \displaystyle \int_{-\infty}^{0} e^{- w^2} dw + \int_{0}^{x / \sqrt{2} \sigma} e^{- w^2} dw\right] \) 

\(\Large = \frac{1}{ \sqrt{ \pi }} \left[ \frac{ \sqrt{2}}{2} + \frac{ \sqrt{2}}{2} \cdot erf \left(\frac{x}{ \sqrt{2} \sigma} \right) \right] \) 

\(\Large = \frac{1}{ 2} \left[ 1 + erf \left(\frac{x}{ \sqrt{2} \sigma} \right) \right] \) 

となります.誤差関数の逆関数を,erf-1,とすると

\(\Large erf \left(\frac{x}{ \sqrt{2} \sigma} \right) = 2 Rand_{0-1}-1 \) 

\(\Large \frac{x}{ \sqrt{2} \sigma} = erf^{-1} (2 \ Rand_{0-1}-1) \) 

\(\Large x = \sqrt{2} \sigma \cdot erf^{-1} (2 \ Rand_{0-1}-1) \) 

となり,0から1のランダム関数と誤差の逆関数を用いれば,正規分布の各点を求めることができます.

実際に,σ=1,で1万回,試行したところ,

のように,標準偏差が1,の正規分布となりました.

実際のプログラムでどう扱うかを次ページに示していきます.

 

l tr